/*
编写函数成反转链表，给定一个链表，从表头开始每两个相邻的节点为一对，
反转每一对中的两个节点，要求交换节点位置，不是交换节点的值，整体顺序不变，
末尾若是单个节点，则该节点位置不变，
如12345，划分成对后为(1,2) (3,4) 5,反转后为21435。
*/
void Reverse(Node head)  //设head是不带数据的哨位结点
{
	Node a,b,pre;
	if(head==NULL||head->next==NULL||head->next->next==NULL)//head为空，没有头结点，只有一个头结点，不处理
		return;
	pre=head;
	a=head->next;
	b=a->next;
	while(b->next||b->next->next)
	{
		Node ta,tb;
		ta=a,tb=b;
		ta->next=tb->next;  //交换一对结点
		tb->next=ta;
		pre->next=tb;

		a=tb;
		b=ta;  //恢复a,b指针的先后关系，始终是a在前，b在后
		b=b->next->next;
		a=a->next->next;
		pre=pre->next->next;
	}
}
